from django.http import JsonResponse
# Create your views here.
from rest_framework.response import Response
from rest_framework.generics import GenericAPIView
from zzw_test_DRF.serializers import testSerializer
from polls.models import TTest


class test_table(GenericAPIView):
    #使用GenericAPIView代替APIView，将表名和序列化器单独写出来，其他代码完全可以不变
    queryset=TTest.objects
    serializer_class=testSerializer
    #不同数据库表的get（全部）和post方法只有上两行改变，其余部分不变
    #下为get（全部）方法：
    def get(self,request):
        #self.queryset取代表名，并执行查找全部的数据库语句，并将
        #序列化后的结果存放在左边变量里
        serializer = self.get_serializer(instance=self.queryset,many=True)
        return Response(serializer.data)
    #下为post方法
    def post(self,request):
        #原理和get类似，代码可直接复制（对不同表的代码一模一样）
        serializer = self.get_serializer(data=request.data)
        #数据检验：通过的数据在serializer.data,验证失败返回serializer.errors
        if serializer.is_valid():#所有字段通过验证
            serializer.save()
            return Response(serializer.data)
        else:#返回错误信息
            return Response(serializer.errors)

from django.db import connection,transaction
class test_table_single(GenericAPIView):
    def get(self,request,cid):#request后的变量随表变化而变化
        print(cid)
        with connection.cursor() as cursor:
            #事务保存点
            save_id = transaction.savepoint()
            #sql原生语句
            sql="SELECT * FROM t_test\
                where cid = %s"
            #执行sql语句，放入变量中
            cursor.execute(sql,[cid])
            qs=cursor.fetchone()
            #提交事务
            transaction.savepoint_commit(save_id)
        #sql结束
        #使用序列化器规范格式,其中testSerializer为序列化器里定义，
        # qs为被规范的原始结果(为tuple格式，好像不能序列化)，many = False表示单条数据，若不为单数据则其为True
        #serializer = testSerializer(instance = qs,many = True)
        #print(serializer.data)
        return Response(qs)